package cn.lizemin.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author lzm
 * @Date 2024/7/27
 * @description servlet的生命周期：
 * 1. 实例化 ，调用构造方法（第一次请求/tomcat启动，和load-on-startup参数有关）
 * 2. 初始化， 调用init方法
 * 3. 接收请求，处理请求    service方法
 * 4. 销毁       destroy方法
 * 结论：
 * 1. servlet是单例的
 * 2. init只在第一次请求时，才会调用该方法，后续的请求都不会走构造器和init方法，因为servlet是单例的
 * 3. 不建议在servlet中修改成员变量，因为会存在线程安全问题
 */
@WebServlet(urlPatterns = "/life", loadOnStartup = 10)
public class ServletLifeCycle extends HttpServlet {

    public ServletLifeCycle() {
        System.out.println("实例化");
    }

    @Override
    public void init() throws ServletException {
        System.out.println("初始化");
    }

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("服务");
    }

    /**
     * 关闭Tomcat后执行这个方法
     */
    @Override
    public void destroy() {
        System.out.println("销毁");
    }


}
